JIT compile
Just In Time Compile
プログラムを動的、つまり実行中にコンパイルする
長所
短所
コンパイル処理のコストが実行時にかかる
空間的負荷
メモリ上の、
コンパイラ自身のプログラムの存在による消費
IR (中間表現)などの中間表現が存在することによる消費
時間的負荷
JITコンパイラの場合特に起動時に処理が集中してしまう
インタプリタとJITコンパイラを併用することで、解決する
つまりHotSpotコンパイラを利用する
HotSpotコンパイラ
On Stack Replacement
脱仮想化
脱最適化
https://github.com/spencertipping/jit-tutorial
tutorial
↓ほぼここのページで書いてることを抜き出してきただけなので、ちゃんと調べてまとめよう。
少しの間、インタプリタなどで動作させる
変数に代入される値を観察し、型システムに関する統計情報を集める
これと、「1つの変数には同じ種類のデータが代入される傾向にある」というヒューリスティックを利用して型を推定
推定がある程度出来たら、ネイティブコードへ変換する
課題
頻繁に使われるものしかネイティブコードにならない
型情報を推定するリードタイムが必要
型の推定に失敗することがある
参考
Webブラウザで高速な演算を可能にする低水準言語asm.jsと、WebAssembly詳解ーJavaScript が動く仕組み | HTML5Experts.jp
https://keens.github.io/blog/2018/12/01/jitarekore/
https://qiita.com/snowlt23/items/3ae2ae27726355fe814c?utm_campaign=popular_items&utm_medium=twitter&utm_source=dlvr.it
https://dev.mozilla.jp/2017/05/ジャスト・イン・タイム-jit-コンパイラのクラッシ/
https://jonathan.protzenko.fr/papers/register09.pdf
https://qiita.com/yanolab/items/4ca45cc80be4fc37ab51
https://www.stephendiehl.com/posts/monads_machine_code.html
monadで作る